﻿// 4401. 找回数组.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://www.acwing.com/problem/content/4404/

有一个长度为 k
 的整数数组 x0,x1,…,xk−1
。

不幸的是，这个数组已经丢失了，我们甚至不知道 k
 的具体值。

幸运的是，我们找到了另一个利用数组 x
 生成的长度为 n+1
 的数组 a0,a1,…,an
。

数组 a
 的正式描述如下：

a0=0
。
对于 1≤i≤n
，ai=x(i−1)modk+ai−1
。
例如，当 x=[1,2,3]
 并且 n=5
 时，生成数组 a
 的过程如下：

a0=0
a1=x0mod3+a0=x0+0=1
a2=x1mod3+a1=x1+1=3
a3=x2mod3+a2=x2+3=6
a4=x3mod3+a3=x0+6=7
a5=x4mod3+a4=x1+7=9
所以，当 x=[1,2,3]
 并且 n=5
 时，可以生成数组 a=[0,1,3,6,7,9]
。

现在，我们希望你通过数组 a
 找回数组 x
。

更具体地说，已知 1≤k≤n
，请你找到所有可能的 k
 值，即数组 x
 的所有可能长度。

输入格式
第一行包含整数 n
。

第二行包含 n
 个整数 a1,a2,…,an
。

注意，由于 a0
 一定等于 0
，所以在输入中并未给出。

输出格式
第一行输出一个整数 l
，表示数组 x
 的所有可能长度的数量。

第二行按升序输出 l
 个整数，表示数组 x
 的所有可能长度。

数据范围
前四个测试点满足 1≤n≤5
，
所以测试点满足 1≤n≤1000
，1≤ai≤106
。

输入样例1：
5
1 2 3 4 5
输出样例1：
5
1 2 3 4 5
输入样例2：
5
1 3 5 6 8
输出样例2：
2
3 5
输入样例3：
3
1 5 3
输出样例3：
1
3
*/
#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}

 